package cn.tedu.baking_wu01.controller;

import cn.tedu.baking_wu01.mapper.UserMapper;
import cn.tedu.baking_wu01.pojo.dto.UserLoginDto;
import cn.tedu.baking_wu01.pojo.entity.User;
import cn.tedu.baking_wu01.pojo.dto.UserRegDto;
import cn.tedu.baking_wu01.pojo.vo.UserIdVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.Date;

/*
 * 用来处理用户相关的内容
 * 这里的v1是把路径拆分写在了类上面，方便后面的方法调用
 * */

@RestController
@RequestMapping("/v1")
public class UserController {
    @Autowired
    UserMapper userMapper;

    @RequestMapping("/regAdd")
    public int regAdd(@RequestBody UserRegDto userReg) {
        //先去验证数据库中的用户名是否已经被注册
        //从前端传递过来的userReg里面吧username交给mapper进行查询id，然后把查询后的结果交给前面定义的id
        UserIdVO id = userMapper.userId(userReg.getUsername());
        //判断ID是否不为空，不为空的话，证明该账号已经被注销
        if (id != null) {
            return 1;
        }
        //先创建实体类(entity)User对象来保存前端传输的数据内容
        User user = new User();
        BeanUtils.copyProperties(userReg, user);
        //设置当前用户的注册时间
        user.setCreateTime(new Date());
        //设置用户注册时的初始头像
        user.setImgUrl("/imgs/headDefault.jpg");
        //设置管理员权限，默认设置为0，0表示不是管理员
        user.setIsAdmin(0);
        System.out.println(user);
        userMapper.UserReg(user);
        return 0;
    }

    @RequestMapping("/login")
    public int login(@RequestBody UserLoginDto userLogin, HttpSession session) {
        System.out.println(userLogin);
        //先去验证数据库中的用户名是否已经被注册
        UserIdVO user = userMapper.userId(userLogin.getUsername());
        //数据库查询到的内容交给user保存，如果查询为空，证明该账号未注册
        if (user == null) {
            return 2;
        } else if (user.getPassword().equals(userLogin.getPassword())) {
            //当判断登录成功后，把当前用户信息交给会话对象保存，让前端检测到会话对象已有内容
            session.setAttribute("user", user);
            return 1;
        } else {
            return 0;
        }
    }

    @GetMapping("/currentUser")
    public UserIdVO currentUser(HttpSession session){
        return (UserIdVO) session.getAttribute("user");
    }
}

